package org.study.dsm.mybatisplus.config;

import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;

/**
 * 数据源切换处理。
 * 主要作用：设置当前线程的数据源名称，移除数据源名称，以及获取当前数据源的名称，便于动态切换
 *
 * @author doveylovey
 * @version v1.0.0
 * @email 1135782208@qq.com
 * @date 2024年04月27日
 */
@Slf4j
public class DynamicDataSourceHolder {
    /**
     * 保存动态数据源名称
     */
    private static final ThreadLocal<String> DS_THREADLOCAL = new ThreadLocal<>();

    /**
     * 设置/切换数据源，决定当前线程使用哪个数据源
     */
    public static void setDataSource(String key) {
        log.info("数据源切换为：{}", key);
        DS_THREADLOCAL.set(key);
    }

    /**
     * 获取动态数据源名称，默认使用mater数据源
     */
    public static String getDataSource() {
        String dsKey = DS_THREADLOCAL.get();
        return StringUtils.isBlank(dsKey) ? CommonConstant.MASTER : dsKey;
    }

    /**
     * 移除当前数据源
     */
    public static void removeDataSource() {
        log.info("移除数据源：{}，并切换到主数据源", DS_THREADLOCAL.get());
        DS_THREADLOCAL.remove();
    }
}
